﻿using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Data;
using Negocio.Generico;
using Negocio.View.Base;
using System;


namespace Negocio.View
{
    /// <summary>
    /// Clase de la Vista de las convocatorias
    /// </summary>
    public class ConvocatoriaView : ViewBase
    {

        #region Singleton

        private static ConvocatoriaView instance;

        private ConvocatoriaView()
        {
            //constructor vacio
        }

        [MethodImpl(MethodImplOptions.Synchronized)]
        public ConvocatoriaView GetInstance()
        {
            if (instance == null)
            {
                instance = new ConvocatoriaView();
            }
            return instance;
        }

        #endregion

        #region Constantes

        /// <summary>
        /// Año de la convocatoria
        /// </summary>
        private const string AÑO = "AÑO";

        /// <summary>
        /// Codigo de alumno asociado a la convocatoria
        /// </summary>
        private const string CODIGOALUMNO = "CODIGOALUMNO";

        /// <summary>
        /// Codigo de la asignatura de la convocatoria
        /// </summary>
        private const string CODIGOASIGNATURA = "CODIGOASIGNATURA";

        /// <summary>
        /// Nota del alumno e junio
        /// </summary>
        private const string CALIFICACIONCONVOCATORIA = "CALIFICACIONCONVOCATORIA";

        /// <summary>
        /// Nota del alumno en julio
        /// </summary>
        private const string OBSERVACIONES = "OBSRVACIONES";

        /// <summary>
        /// Nota del alumno en septiembre
        /// </summary>
        private const string CODIGOCONVOCATORIA = "CODIGOCONVOCATORIA";

        #endregion

        #region View
        /// <summary>
        /// Devuelve un listado de convocatorias sin condiciones de filtro
        /// </summary>
        /// <returns></returns>
        public DataView GetConvocatoriasView() 
        {
            return this.GetConvocatoriasView(new ConvocatoriaDTO());
        }

        /// <summary>
        /// Funcion que devuelve un listado de convocatorias en funcion del alumno
        /// </summary>
        /// <param name="filtro">Filtro que contiene todos los parametros de busqueda de las convocatorias en funcion de la asignatura</param>
        /// <returns>DataView que contiene todos los datos que van a ser mostrados</returns>
        public DataView GetConvocatoriasView(ConvocatoriaDTO filtro)
        {
            try
            {
                DataView dv = new DataView();
                DataTable dt = new DataTable();

                dt.Columns.Add(ConvocatoriaView.AÑO, this.GetTypeSqlDateTime);
                dt.Columns.Add(ConvocatoriaView.CODIGOASIGNATURA, this.GetTypeSqlInt32);
                dt.Columns.Add(ConvocatoriaView.CODIGOALUMNO, this.GetTypeSqlInt32);
                //TODO: Estoy trabajando con floats,no se podra representar en el movil,tenerlo en cuentas
                dt.Columns.Add(ConvocatoriaView.CALIFICACIONCONVOCATORIA, this.GetTypeSqlDouble);
                dt.Columns.Add(ConvocatoriaView.OBSERVACIONES, this.GetTypeString);
                dt.Columns.Add(ConvocatoriaView.CODIGOCONVOCATORIA, this.GetTypeSqlInt32);

                using (Negocio.Generico.ContratoGenericoClient servicio = new ContratoGenericoClient())
                {
                    foreach (ConvocatoriaDTO bean in servicio.Get(filtro))
                    {
                        DataRow dr = dt.NewRow();
                        dr[ConvocatoriaView.AÑO] = bean.Año;
                        dr[ConvocatoriaView.CODIGOASIGNATURA] = bean.CoAsignatura;
                        dr[ConvocatoriaView.CODIGOALUMNO] = bean.CoAlumno;
                        dr[ConvocatoriaView.CALIFICACIONCONVOCATORIA] = bean.CalificacionConvocatoria;
                        dr[ConvocatoriaView.OBSERVACIONES] = bean.Observaciones;
                        dr[ConvocatoriaView.CODIGOCONVOCATORIA] = bean.CoConvocatoria;

                        dt.Rows.Add(dr);
                    }

                }
                return dt.DefaultView;
            }
            catch (Exception ex)
            {
                throw new ViewException(ex);
            }
        }

        #endregion

    }
}